package org.langqiao.algorithm;
/*
 * A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛，也可能不参加。因为某种原因，他们是否参赛受到下列条件的约束：
   1. 如果A参加，B也参加；
   2. 如果C不参加，D也不参加；
   3. A和C中只能有一个人参加；
   4. B和D中有且仅有一个人参加；
   5. D、E、F、G、H 中至少有2人参加；
   6. C和G或者都参加，或者都不参加；
   7. C、E、G、I中至多只能2人参加   
   8. 如果E参加，那么F和G也都参加。
   9. 如果F参加，G、H就不能参加
   10. 如果I、J都不参加，H必须参加
请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能，则输出所有的可能情况。每种情况占一行。参赛同学按字母升序排列，用空格分隔。
比如：
C D G J
就是一种可能的情况。
要求考生把所有类写在一个文件中。调试好后，存入与考生文件夹下对应题号文件夹中的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。

 */
public class CompetionSelect1 {
	public static void main(String[] args)
	{
		int count=0;
		for(int a=0;a<2;a++)
		{
			for(int b=0;b<2;b++)
			{
				for(int c=0;c<2;c++)
				{
					for(int d=0;d<2;d++)
					{
						for(int e=0;e<2;e++)
						{
							for(int f=0;f<2;f++)
							{
								for(int g=0;g<2;g++)
								{
									for(int h=0;h<2;h++)
									{
										for(int i=0;i<2;i++)
										{
											for(int j=0;j<2;j++)
											{
												if((a==1&&b==1||a==0)&&(c==0&&d==0||c==1)&&(a+c==1)&&(b+d==1)&&(d+e+f+g+h>=2)&&(c==g)&&
														(c+e+g+i<=2)&&(e==1&&(f+g==2)||e==0)&&
														(f==1&&(g+h==0)||f==0)&&(i+j==0&&h==1||i==1||j==1))
												{
												    f(a,b,c,d,e,f,g,h,i,j);
												    count++;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		System.out.println("可能的参赛人员的组合有"+count+"种");
	}
	public static void f(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j)
	{
		StringBuffer sb=new StringBuffer();
		if(a==1)
			sb.append("A ");//一定要带空格
		if(b==1)
			sb.append("B ");
		if(c==1)
			sb.append("C ");
		if(d==1)
			sb.append("D ");
		if(e==1)
			sb.append("E ");
		if(f==1)
			sb.append("F ");
		if(g==1)
			sb.append("G ");
		if(h==1)
			sb.append("H ");
		if(i==1)
			sb.append("I ");
		if(j==1)
			sb.append("J ");
		System.out.println(sb.toString());//将StringBuffer类型转化为String类型
	}
}
